// fireworks.js
Component({
    data: {},
    properties: {},
    methods: {
      // 生命周期：组件准备就绪
      ready() {
        this.canvasCtx = wx.createCanvasContext('fireworksCanvas');
        this.fireworks = [];
        this.audio = wx.createInnerAudioContext();
        this.audio.src = 'https://path/to/fireworks-sound.mp3';  // 音效文件路径
  
        // 自动启动烟花动画
        this.startFireworks();
      },
  
      // 自动启动烟花动画
      startFireworks() {
        // 播放烟花音效
        this.audio.play();
  
        // 初始化烟花效果并开始动画
        this.fireworks = [];
        this.initFireworks();
        this.animateFireworks();
      },
  
      // 初始化烟花效果，生成多个粒子
      initFireworks() {
        const numParticles = 100;  // 烟花的粒子数量
        const centerX = wx.getSystemInfoSync().windowWidth / 2;
        const centerY = wx.getSystemInfoSync().windowHeight / 2;
  
        for (let i = 0; i < numParticles; i++) {
          this.fireworks.push({
            x: centerX,
            y: centerY,
            radius: Math.random() * 2 + 1,  // 粒子的大小
            angle: Math.random() * 2 * Math.PI,  // 随机角度
            speed: Math.random() * 4 + 2,  // 粒子的速度
            color: `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`, // 随机颜色
            alpha: 1,  // 粒子的透明度
            lifespan: Math.random() * 100 + 100  // 粒子的生命周期
          });
        }
      },
  
      // 绘制烟花，并使粒子运动
      animateFireworks() {
        this.canvasCtx.clearRect(0, 0, wx.getSystemInfoSync().windowWidth, wx.getSystemInfoSync().windowHeight);
  
        for (let i = 0; i < this.fireworks.length; i++) {
          let f = this.fireworks[i];
          // 计算粒子的新位置
          f.x += f.speed * Math.cos(f.angle);
          f.y += f.speed * Math.sin(f.angle);
  
          // 渐变的透明度
          f.alpha -= 0.01;
          f.lifespan--;
  
          if (f.lifespan <= 0) {
            // 删除生命周期结束的粒子
            this.fireworks.splice(i, 1);
            i--;
          }
  
          // 画出每个粒子
          this.canvasCtx.beginPath();
          this.canvasCtx.arc(f.x, f.y, f.radius, 0, 2 * Math.PI);
          this.canvasCtx.fillStyle = f.color;
          this.canvasCtx.globalAlpha = f.alpha;
          this.canvasCtx.fill();
        }
  
        // 如果还有烟花粒子，继续绘制
        if (this.fireworks.length > 0) {
          this.canvasCtx.draw(true);
          requestAnimationFrame(this.animateFireworks.bind(this));  // 继续下一帧动画
        }
      }
    }
  });
  